package com.tr.syscms.service.impl;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.tr.common.util.CustomException;
import com.tr.common.util.ResultStatus;
import com.tr.syscms.entity.Role;
import com.tr.syscms.mapper.RoleMapper;
import com.tr.syscms.service.RoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 角色信息表 服务实现类
 * </p>
 *
 * @author xiijava
 * @since 2022-06-07
 */
@Service
public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements RoleService {

    @Autowired
    private RoleMapper roleMapper;

    @Override
    public List<Integer> queryRoleIdsByUserId(Integer userId) {
        return roleMapper.queryRoleIdsByUserId(userId);
    }

    @Transactional
    @Override
    public int addUserAndRole(int userId, String roleIds) {
        //定义是否成功标识
        boolean isSuc=true;
        //删除以前该用户id关联的所有角色
        int resultN = roleMapper.deleteUserRoleByUserId(userId);
        //判断是否为空 方法2执行
        /*if(!StrUtil.isEmpty(roleIds)){
            //不为空分割 5,6,7,8  roleIdArray=[5,6,7,8]
            String[] roleIdArray = roleIds.split(",");
            for (String roleId : roleIdArray) {
                //循环添加
                int resultNum = roleMapper.addUserRole(userId, roleId);
                if (resultNum<1){
                    isSuc=false;
                }
            }
        }
         if(isSuc&&resultN>0){
            return 1;
        }
        */
        int sucNum = 0;
        //方法1执行
        if(!StrUtil.isEmpty(roleIds)){
            List<Map> mapList = new ArrayList<>();
            //不为空分割 5,6,7,8  roleIdArray=[5,6,7,8]
            String[] roleIdArray = roleIds.split(",");
            Map map = null;
            for (String roleId : roleIdArray) {
                map = new HashMap();
                map.put("userId",userId);
                map.put("roleId",roleId);
                mapList.add(map);
            }
            sucNum = roleMapper.addUserAndRole(mapList);
        }
        if(resultN>0&&sucNum>0){
            return 1;
        }
        return 0;
    }

    /**
     * 通过Map作为筛选条件分页查询
     *
     * @param map
     * @return
     */
    @Override
    public PageInfo queryAll(Map map) {
        if (map.get("pageNo") == null || map.get("pageSize") == null) {
            throw new CustomException(ResultStatus.ARGUMENT_IS_NOT_NULL.getReturncode(),
                    ResultStatus.ARGUMENT_IS_NOT_NULL.getReturnMessage());
        }
        Integer pageNo = Integer.valueOf(map.get("pageNo") + "");
        Integer pageSize = Integer.valueOf(map.get("pageSize") + "");
        //设值页码和每页显示数量
        PageHelper.startPage(pageNo, pageSize);
        //默认查询有效数据
        if(map.get("isHaveSatus")!=null) {
            map.put("status", "0");
        }
        //默认查询不被删除
        map.put("delFlag","0");
        //使用查询结果，构造PageInfo
        PageInfo pageInfo = new PageInfo(this.roleMapper.queryAll(map));
        return pageInfo;
    }

    /**
     * 通过ID查询单条数据
     *
     * @param roleId 主键
     * @return 实例对象
     */
    @Override
    public Role queryById(Integer roleId) {
        return this.roleMapper.queryById(roleId);
    }

    /**
     * 查询多条数据
     *
     * @param offset 查询起始位置
     * @param limit  查询条数
     * @return 对象列表
     */
    @Override
    public List<Role> queryAllByLimit(int offset, int limit) {
        return this.roleMapper.queryAllByLimit(offset, limit);
    }

    /**
     * 新增数据
     *
     * @param role 实例对象
     * @return 实例对象
     */
    @Override
    public Role insert(Role role) {
        role.setDelFlag("0");
        this.roleMapper.insert(role);
        return role;
    }

    /**
     * 修改数据
     *
     * @param role 实例对象
     * @return 实例对象
     */
    @Override
    public Role update(Role role) {
        this.roleMapper.update(role);
        return this.queryById(role.getRoleId());
    }

    /**
     * 通过主键删除数据
     *
     * @param roleId 主键
     * @return 是否成功
     */
    @Override
    public boolean deleteById(Integer roleId) {
        return this.roleMapper.deleteById(roleId) > 0;
    }
}
